Тем, кто не читал предыдущий топик этой темы, рекомендую для начала ознакомиться с ним [1].
В комментариях к предыдущему топику меня критиковали за неоптимальность кода Python. Однако, текст читают люди с совершенно разной подготовкой — от почти не знающих Python или знающих другие языки программирования, до продвинутых пользователей. Последние легко могут обнаружить неоптимальность кода и заменить его своим. Тем не менее, код должен быть доступен и новичкам, возможно не обладающим знанием пакетов и продвинутых методов. Поэтому, в коде я буду, по возможности, использовать только базовые конструкции Python, не требующие глубоких знаний, и которые могут легко читаться людьми, программирующими на других языках. Вместе с тем, по мере изложения, без фанатизма, буду вводить и новые элементы Python.
Если вы хотите как-то улучшить или оптимизировать код, приводите его в комментариях — это только расширит и улучшит изложенный материал.
Ну, а сейчас мы займемся разработкой и тестированием индикаторов. Для начала нам нужна простейшая стратегия с использованием МА — его и построим. Самой лучшей по характеристикам МА является ЕМА. Формула ЕМА:
Для моделирование ТС на Python, прежде всего нужен сам Python. Pythonы бывают очень разные.
Самый большой и длинный Python — Anaconda (https://anaconda.org/). Скачать дистрибутив Anaconda можно здесь — Индивидуальное издание -https://www.anaconda.com/products/individual.
Я работаю именно с Anaconda. Установив Anaconda мы получаем сам Python, уже установленные значительную часть нужных и ненужных пакетов с библиотеками Python, и несколько сред разработки. И все это сразу готово к работе, и нам, по большей части, уже не придется дополнительно устанавливать пакеты и среды.
Самый маленький Python последней версии 3.8.2. скачивается с сайта самого Python — https://www.python.org/. Это, практически, только сам язык, компилятор и минимальный набор пакетов. Сделать с ним практически ничего невозможно, и для работы придется постоянно устанавливать нужные пакеты. Среду разработки придется также устанавливать самостоятельно.
Этот Python больше подходит для запуска и работы с уже отлаженными законченными программами.
Стратегия стара как мир, и называется — календарный спред. В общем, разновидность арбитража. В простейшем виде, продаем дальний фьючерс, покупаем ближний, ждем некоторое время, закрываем позицию, получаем гарантированную прибыль. Как и у каждой стратегии, есть свои нюансы, и ошибки могу привести к убыткам. Но, это не ошибки, типа, не угадали куда пойдет — вверх или вниз. Это ошибки стратегии. Здесь не надо гадать куда пойдет.
В неклассическом виде в эту стратегию можно играть хоть интрадей, и 3-4 сделки в день вам обеспечены. Играть руками не рекомендую, целый день пялиться в монитор — может крыша поехать. А вот автоматом оч неплохо, тем более, что стратегия легко алгоритмизируется. Риски? — максимум 2-3 неудачных копеечных сделок в месяц.
Ну, и прежде чем начинать, попробуйте на кошках — смоделируйте в Python, например.
Исходная идея изложена. Ну, а конкретика, это уже не для общего доступа, кому нужны конкуренты в стакане.) Здесь каждый сам за себя. Ну, а стратегий на этой идее можно построить не одну, а целое семейство. Удачи!
К сожалению, я не шучу. Quik мне активно не нравится. О недостатках Quik — неудобный, глючный, периодически подвисающий на абсолютно пустом месте в самый неподходящий момент, и пр., и пр. Даже оставив в нем всего несколько самых необходимых окон и инструментов, избавиться от его глючности не получится. Уж, за более чем 10 лет, разработчики Quik могли бы его довести до ума, но воз и ныне там.
Видел и пользовался терминалами много лучше — с полным C-API, оч удобные и лишенные каких либо существенных недостатков — на них и работал аж до 2013 г. Это были самопальные термналы брокеров, для которых, к тому-же, было написано много вспомогательного софта. К сожалению, к 2013 г терминалы безнадежно устарели, благодаря апгрейдам становились все хуже, и, в конце концов, были сняты брокером с эксплуатации. Вся проделанная работа по написанию софта пошла прахом, и для работы предстояло выбрать другой терминал и/или брокера.
Коннекторы сразу не подошли. Остался выбор из 3-х терминалов c возможностью программирования или подключения внешнего софта — Quik, TRANSAQ, и МТ5.
TRANSAQ: есть только у одного брокера Финам. Если Финам откажется от Transag или поменяет версию терминала на несовместимую, то весь вспомогательный софт предстоит переделывать заново. Спсибо, я это уже проходил.) Кроме того, Transag есть толькоу Финам, и изменить брокера становится невозможно — опять надо будет все переделывать.
МТ5: имеется для МОЕХ у ограниченнного числа брокеров. Строго говоря, биржевым терминалом не является, и судя по форуму MQL, проблем с биржей у него выше крыши. Я так понимаю(оценочное суждение), фирма MQ попыталась вывести МТ5 на биржу, ничего с этого не получила, и завязала с этой деятельностью. Да, такой хоккей нам тоже не нужен.
Quik — старенький, плохонький, глюковатенький, но имеет всю необходимую функциональность, и все нужные возможности. Имеется практически у всех брокеров — смена или добавление брокера не вызовет проблем. В одночасье не исчезнет, что могут себе позволить терминалы оганиченного применения — Transaq, и тот же МТ5.
Отсюда следует, что Quik — лучший терминал для биржи MOEX для большинства пользователей, особенно для тех, кто пользуется каким либо вспомогательным софтом — индикаторы, торговые системы, системы анализа и пр.
Жаль, что я этого не понял раньше, не пришлось бы весь софт переписывать с нуля.
Мне нравится Lua. Lua хороший компактный язык на котором можно сделать индикаторы, различные вспомогательные программы, помогающие трейдеру и даже несложные торговые системы (ТС, роботы). Пожалуй единственная книга по Lua — Роберту Иерузалимски: Программирование на языке Lua. Ее можно найти в интернете.
Lua имеет также несложный C-API позволяющий связать программы Quik Lua с внешним миром через DLL и получить доступ практически ко всему, в том числе к любым математическим библиотекам обработки данных, что необходимо для сколь-нибудь сложным ТС. Однако, для этого уже необходимо знание не только Lua, но и Lua C-API, языка С/С++, а также умения писать DLL. При этом надо будет решить еще ряд проблем, которые возникнут по ходу пьесы в процессе этой деятельности. Далеко не каждый пользователь Quik и Lua может все это реализовать в обозримое время.
У Quik Lua (QLua) есть еще недостатки — все события терминала в Lua работают в потоке терминала, и получив из них данные надо как можно быстрей завершать функции обработки этих данных и освобождать поток терминала, иначе терминал просто повиснет. Единственная функция QLua работающая в собственном потоке — это main() и вся сколь-нибудь сложная обработка может находиться только в ней.
Кроме того, для Lua крайне мало библиотек, а существующие работают оч не быстро. В принципе, это и не нужно, если можно организовать связь с внешним миром через C-API. Но нам от этого легче не становится.) Короче, для написания хорошей сложной ТС нам надо выйти за пределы QLua и установить связь с внешним миром, и сделать это доступными средствами.
Сейчас наиболее продвинутым языком, включающим в себя массу библиотек обработки данных является Python. По применимости для обработки данных он, пожалуй, занимает первое место в мире, а по распространенности входит в первую пятерку. В числе библиотек — математические, статистические, машинного обучения и пр., и пр. Таких библиотек более тысячи только в Anaconda, большинство из которых устанавливается при ее инсталяции. Вы можете не использовать Anaconda и скачать Python с сайта
К обеду астролябия была продана интеллигентному слесарю за три рубля.
— Сама меряет, — сказал молодой человек, передавая астролябию покупателю, — было бы что мерять.
(И.Ильф, Е.Петров, Двенадцать стульев.)
Машинное обучение (МО) сейчас является очень популярной темой, и им не занимается только ленивый. В наличии масса готовых к употреблению библиотек — нейросети, леса-деревья, Байесы, и пр. и пр. Осваивается все это за пару недель и применяй — не хочу. Однако, результаты такого применения в трейдинге как правило нулевые или около того. Без толку, но, хотя-бы хорошо провели время,) узнали много нового и интересного.
Отрицательные результаты объясняюся тем, что методы МО — это не более чем математическое выражение или их набор формируемый в процессе обучения. При этом МО старается как можно точнее подогнать мат. выражение(я) под ответы представленные в обучающей выборке. Т.е., в принципе, методология МО ничем не отличается от банальной подгонки решения под имеющийся ответ. В студенческие годы, если что-то не сходилось, оч помогало умножить или разделить, скажем, на корень из Пи или корень из двух. Вот, и МО делает абсолютно тоже самое. И мы занимаемся тем же самым, когда подбираем параметры индикаторов, входов, тейков и стопов для получения от стратегии максимальной прибыли, и, надо сказать, с тем-же результатом — вся эта подгонка работает только на том отрезке, где мы подобрали, и никак на реальном рынке. К чести МО отметим, что методы МО гораздо лучше и эффективней чем мы занимаются подгонкой, и на интервале обучения получат классную ТС из практически всего, что вам придет в голову. Только реально работать это не будет.(
Таким образом, для типовых методов построения торговых систем применение МО не дает и не может дать ровным счетом ничего, и применение МО в подобных системах не имеет смысла. Можно не дергаться, такие задачи МО не решает.
Ну, и выводы:
МО следует применять для задач, имеющих решения, которые можно получить подгонкой под ответ. Для решения других задач методы МО не предназначены.
Такие задачи и следует искать для применения МО при разработке ТС. И если вы их найдете, это может сэкономить вам массу времени и сил. Подобных задач, кстати, великое множество, но с этим лучше обратиться к специальной литературе.